﻿//一线串口控制程序（单字节指令）
/*--------------------------------------
;模块名称:Line_1A_WT588F_Single(UC8 DDATA)
;功    能:实现一线串口通信函数
;入    参: DDATA为发送数据
;出    参:
;P_DATA 控制IO
;-------------------------------------*/

#define	UC8 	unsigned char
#define	P_DATA	P01

void Line_1A_WT588F(UC8 DDATA)
{
    UC8  S_DATA, j;
    UC8  B_DATA;
    S_DATA =  DDATA;
    P_DATA = 0;
    Delay_1ms(5);               //延时5ms
    B_DATA = S_DATA & 0X01;
    
    for(j = 0; j < 8; j++)
    {
        if(B_DATA == 1)
        {
            P_DATA = 1;
            Delay_N10us(60);    //延时600us
            P_DATA = 0;
            Delay_N10us(20);    //延时200us
        }
        
        else
        {
            P_DATA = 1;
            Delay_N10us(20);    //延时200us
            P_DATA = 0;
            Delay_N10us(60);    //延时600us
        }
        
        S_DATA = S_DATA >> 1;
        B_DATA = S_DATA & 0X01;
    }
    
    P_DATA = 1;
}

//一线串口控制程序（双字节指令）
/*--------------------------------------
;模块名称:Line_1A_WT588F_Couple(UI16 USER_DATA)
;功    能:实现一线串口通信函数
;入    参:USER_DATA
;出    参:
;one_line_DATA  控制IO
;-------------------------------------*/

#define	UC8 	unsigned char
#define	UI16 	unsigned int
#define	one_line_DATA	P01

void Line_1A_WT588F_Couple(UI16 USER_DATA)
{
    UC8 i, num_temp;
    UC8 B_DATA;
    UI16  ddata_temp, pdata_temp;
    ddata_temp = USER_DATA;
    pdata_temp = ddata_temp & 0X00FF;   //移位前准备
    pdata_temp <<= 8;                   //低字节移位到高字节
    ddata_temp >>= 8;                   //高字节移位到低字节
    ddata_temp |= pdata_temp;           //移位后重新合并
    num_temp = 16;
    one_line_DATA = 0;                  //拉低数据线
    Delay_10us(500);                    //延时5MS
    B_DATA = ddata_temp & 0X0001;
    
    for(i = 0; i < num_temp; i++)
    {
        if(i == 8)
        {
            one_line_DATA = 1;
            Delay_10us(200);	        //延时2MS
            one_line_DATA = 0;
            Delay_10us(500);            //延时5MS
        }
        
        one_line_DATA = 1;				//拉高数据传输线 ,准备传输数据
        
        if(B_DATA == 0)
        {
            /*表示逻辑电平0*/
            Delay_10us(20);             // 延时200us
            one_line_DATA = 0;
            Delay_10us(60);	            // 延时600us
        }
        
        else
        {
            /*表示逻辑电平1*/
            Delay_10us(60);             // 延时600us
            one_line_DATA = 0;
            Delay_10us(20);	            // 延时200us
        }
        
        ddata_temp = ddata_temp >> 1;
        B_DATA = ddata_temp & 0x0001;
    }
    
    one_line_DATA = 1;
}

//一线串口双字节连码示例(FFF3 + 0001 + FFF3 + 0002)
/*--------------------------------------
;模块名称:List_1A_Play_WT588F()
;功    能:实现一线串口连码发送函数
;入    参:
;出    参:
;-------------------------------------*/

void List_1A_Play_WT588F_Couple(void)
{
    Line_1A_WT588F_Couple(0xFFF3);
    Delay_1ms(5);			//延时5ms
    Line_1A_WT588F_Couple(0x0001);
    Delay_1ms(10);			//延时10ms
    Line_1A_WT588F_Couple(0xFFF3);
    Delay_1ms(5);			//延时5ms
    Line_1A_WT588F_Couple(0x0001);
    Delay_1ms(10);		    //延时10ms
}

//一线串口单字节连码示例(F3 + 01 + F3 + 02)
/*--------------------------------------
;模块名称:List_1A_Play_WT588F()
;功    能:实现一线串口连码发送函数
;入    参:
;出    参:
;-------------------------------------*/

void List_1A_Play_WT588F(void)
{
    Line_1A_WT588F(0xF3);
    Delay_1ms(2);           //延时2ms
    Line_1A_WT588F(0x01);
    Delay_1ms(5);           //延时5ms
    Line_1A_WT588F(0xF3);
    Delay_1ms(2);           //延时2ms
    Line_1A_WT588F(0x02);
    Delay_1ms(5);           //延时5ms
}

//二线串口控制程序(单字节指令)
/*--------------------------------------
;模块名称:Line_2A_WT588F(UC8 DDATA)
;功    能:实现二线串口通信函数
;入    参:DDATA为发送数据
;出    参:
;CLK_2A         时钟线
;P_DATA_2A      数据线
;-------------------------------------*/

#define	UC8 	unsigned char
#define	CLK_2A      P01
#define	P_DATA_2A 	P00

void  Line_2A_WT588F(UC8 DDATA)
{
    UC8 S_DATA, j;
    UC8 B_DATA;
    CLK_2A    = 1;          //拉高CLK
    P_DATA_2A = 1;          //拉高DATA
    S_DATA = DDATA;
    Delay_1ms(5);
    CLK_2A  = 0;            //拉低CLK
    Delay_1ms(5);           //延时5ms
    B_DATA = S_DATA & 0X01;
    
    for(j = 0; j < 8; j++)
    {
        CLK_2A = 0;			//拉低CLK
        P_DATA_2A = B_DATA;	//传输数据一位
        Delay_N10us(30);    //延时300us
        CLK_2A = 1;         //拉高CLK
        Delay_N10us(30);    //延时300us
        S_DATA = S_DATA >> 1;
        B_DATA = S_DATA & 0X01;
    }
    
    P_DATA_2A = 1;
    CLK_2A    = 1;
}

//二线串口控制程序(双字节指令)
/*--------------------------------------
;模块名称:Line_2A_WT588F(UI16 USER_DATA)
;功    能:实现二线串口通信函数
;入    参:USER_DATA为发送数据
;出    参:
;CLK_2A         时钟线
;DATA_2A        数据线
;-------------------------------------*/

#define	UC8 	unsigned char
#define	UI16 	unsigned int
#define	CLK_2A		P01
#define	DATA_2A	    P02

void Line_2A_WT588F_Couple(UI16 USER_DATA)
{
    UC8 j, num_temp;
    UI16  ddata_temp, pdata_temp;
    CLK_2A = 1;
    Delay_10us(500);
    ddata_temp = USER_DATA;
    pdata_temp = ddata_temp & 0X00FF;
    ddata_temp >>= 8;
    pdata_temp <<= 8;
    ddata_temp |= pdata_temp;
    num_temp = 16;
    CLK_2A = 0;             //拉低CLK
    Delay_10us(500);        //延时5ms
    
    for(j = 0; j < num_temp; j++)
    {
        if(j == 8)
        {
            CLK_2A = 1;
            DATA_2A = 1;
            Delay_N10us(200);   //延时2ms
            CLK_2A    = 0;
            Delay_N10us(500);   //延时5ms
        }
        CLK_2A = 0;
        DATA_2A = ddata_temp & 0X0001;
        Delay_N10us(20);        //延时200us
        CLK_2A    = 1;
        Delay_N10us(20);        //延时200us
        ddata_temp = ddata_temp >> 1;
    }
    
    CLK_2A = 1;
    DATA_2A = 1;
}

//二线串口双字节连码示例(FFF3 + 0001 + FFF3 + 0002)
/*--------------------------------------
;模块名称:List_2A_Play_WT588F()
;功    能:实现二线串口双字节连码发送函数
;入    参:
;出    参:
;-------------------------------------*/

void List_2A_Play_WT588F_Couple(void)
{
    Line_2A_WT588F_Couple(0xFFF3);
    Delay_N10us(500);          //延时5ms
    Line_2A_WT588F_Couple(0x0001);
    Delay_N10us(1000);          //延时10ms
    Line_2A_WT588F_Couple(0xFFF3);
    Delay_N10us(500);          //延时5ms
    Line_2A_WT588F_Couple(0x0002);
    Delay_N10us(1000);          //延时10ms
}

//二线串口单字节连码示例(F3 + 01 + F3 + 02)
/*--------------------------------------
;模块名称:List_2A_Play_WT588F()
;功    能:实现二线串口单字节连码发送函数
;入    参:
;出    参:
;-------------------------------------*/

void List_2A_Play_WT588F(void)
{
    Line_2A_WT588F(0xF3);
    Delay_N10us(200);          //延时2ms
    Line_2A_WT588F(0x01);
    Delay_N10us(500);          //延时5ms
    Line_2A_WT588F(0xF3);
    Delay_N10us(200);          //延时2ms
    Line_2A_WT588F(0x02);
    Delay_N10us(500);          //延时5ms
}